/* const a = {
  name: 18,
}
// b 等于了一个全新的对象
const b = {
  name: 18,
}

// 两个新对象之间永远不可能相等
console.log(a === b) // false */

/* const a = {
  name: 18,
}
// 把 a 的引用地址给了 b
const b = a
console.log(a === b) // true */

/* const a = {
  name: 18,
}
const b = {
  name: 18,
}

// 判断两个对象的内容等不等
console.log(JSON.stringify(a) === JSON.stringify(b)) */

/* function add() {}
function two() {
  // return 3
}
function one() {
  // return 3
}

console.log(one(add(two()))) // 3
console.log(two(add(one()))) // 3 */

const p1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(1)
  }, 1000)
})
const p2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(2)
  }, 2000)
})
const p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(3)
  }, 3000)
})

/* // Promise 全部成功态，就走后面的 then，并打印所有的结果，有一个错误就 catch
Promise.all()
// Promise 最先成功的那个，就走后面的 then，并打印最先成功的结果，有一个错误就 catch
Promise.race() */

// 应用场景：假如有多个请求，都拿到结果之后，才去做后续的处理
// 并行
/* Promise.all([p1, p2, p3]).then((r) => console.log(r))
Promise.race([p1, p2, p3]).then((r) => console.log(r))
;(async () => {
  try {
    await Promise.all([p1, p2, p3])
  } catch (e) {}

  // 串行
  await p1
  await p2
  await p3
  console.log(1)
})() */

try {
  xxx
} catch {}
console.log(1)
